
import java.util.Iterator;
import java.util.Queue;
import java.util.LinkedList;


public class LevelOrderIterator implements Iterator {

	private Queue q;

	public LevelOrderIterator( BinaryTreeNode root ) {
		q = new LinkedList();
		q.offer( root );
	}

	public boolean hasNext() {
		return !q.isEmpty();
	}

	public Object next() {
		if (!hasNext()) {
			throw new IllegalStateException();
		}

		BinaryTreeNode node = (BinaryTreeNode)q.poll();

		if (node.left != null) {
			q.offer( node.left );
		}

		if (node.right != null) {
			q.offer( node.right );
		}

		return node;
	}

	public void remove() {
		throw new UnsupportedOperationException();
	}

}

